# drop_duplicates()
# 在一个数据集中，找出重复的数据删并将其删除，最终只保存一个唯一存在的数据项，这就是数据去重的整个过程
# 删除重复数据是数据分析中经常会遇到的一个问题。通过数据去重，不仅可以节省内存空间，提高写入性能，还可以提升数据集的精确度，使得数据集不受重复数据的影响。

# subset：表示要进去重的列名，默认为 None。
# keep：有三个可选参数，分别是 first、last、False，默认为 first，表示只保留第一次出现的重复项，删除其余重复项，last 表示只保留最后一次出现的重复项，False 则表示删除所有重复项。
# inplace：布尔值参数，默认为 False 表示删除重复项后返回一个副本，若为 Ture 则表示直接在原数据上删除重复项。

import pandas as pd

data = {
    'A': [1, 0, 1, 1],
    'B': [0, 2, 5, 0],
    'C': [4, 0, 4, 4],
    'D': [1, 0, 1, 1]
}
df = pd.DataFrame(data=data)
print(df)

# 默认保留第一次出现的重复项
df.drop_duplicates()
#   A B C D
# 0 1 0 4 1
# 1 0 2 0 0
# 2 1 5 4 1

# keep=False删除所有重复项
df.drop_duplicates(keep=False)
#   A B C D
# 1 0 2 0 0
# 2 1 5 4 1

# 根据指定列标签去重
# 去除所有重复项，对于B列来说两个0是重复项
print(df.drop_duplicates(subset=['B'], keep=False))
#    A  B  C  D
# 1  0  2  0  0
# 2  1  5  4  1


# 指定多列同时去重
df = pd.DataFrame({'Country ID': [1, 1, 2, 12, 34, 23, 45, 34, 23, 12, 2, 3, 4, 1],
                   'Age': [12, 12, 15, 18, 19, 25, 21, 25, 25, 18, 25, 12, 32, 18],
                   'Group ID': ['a', 'z', 'c', 'a', 'b', 's', 'd', 'a', 'b', 's', 'a', 'd', 'a', 'f']})
# last只保留最后一个重复项
df.drop_duplicates(['Age', 'Group ID'], keep='last')
